/**
 * 對於 BaseCommandController 及其子類別來說，它的 Command 物件並不一定要接受基本型態或是 String 型態，<br>
 * 您可以撰寫一個實作 java.beans.PropertyEditor 的類別，在當中進行轉換，例如將接收到的字串轉換為 User 類別的實例。<br>
 * MyForm 為網頁表單的物件代表。<br>
 * 我們的 Command 物件將接收一個自訂型態的 User 實例，然而從 HTTP 接收到的參數值是 String 型態，我們可以撰寫一個 UserPropertyEditor 類別做轉換，<br>
 * 通常直接繼承 java.beans.PropertyEditorSupport 並重新定義它的 getAsText() 及 setAsText() 方法。<br>
 * 當必須從指定的物件轉換為字串時，會呼叫 getAsText() 方法，而接收到參數要將之轉換為指定的物件時，會呼叫 setAsText() 方法。
 */

package propertyeditor;

import java.beans.PropertyEditorSupport;

import com.e885.log.E885Logger;

/**
 * @author Eric.Kao(gau168.gau@msa.hinet.net)
 * @version 1.0
 * @company E885 Group
 * @copyright Copyright (c) 2001-2008
 */

public class MyPropertyEditor extends PropertyEditorSupport
{

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.beans.PropertyEditorSupport#getAsText()
	 */
	@Override
	public String getAsText()
	{
		E885Logger.testLog.debug( "execute method getAsText()" );

		Object obj = getValue();

		if( obj == null || !( obj instanceof User ) )
			return null;

		User user = ( User )obj;

		return user.getFirstName() + "," + user.getFirstName();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
	 */
	@Override
	public void setAsText( String text ) throws IllegalArgumentException
	{
		E885Logger.testLog.debug( "execute method setAsText()" );
		E885Logger.testLog.debug( "text:[" + text + "]" );

		String[] tokens = text.split( "," );
		
		E885Logger.testLog.debug( "the lenth of the tokens:" + tokens.length );

		User user = new User();
		user.setFirstName( tokens[ 1 ] );
		user.setLastName( tokens[ 0 ] );

		setValue( user );
	}
}
